/**
* @File           :   api.go
* @Time           :   2022/05/09
* @Author         :   Mz100
* @Description    :   Api 路由
 */
package routers

import (
	"github.com/gin-gonic/gin"
	"xdingtec.cn/xdkaika/app"
	"xdingtec.cn/xdkaika/app/http/api/controller"
	"xdingtec.cn/xdkaika/app/middleware/cors"
	"xdingtec.cn/xdkaika/app/middleware/jwt"
)

func ApiRouter() *gin.Engine {
	r := gin.Default()
	//根据配置进行设置跨域
	if app.CONFIG.Cors {
		r.Use(cors.Next())
	}
	urlExclude := []string{
		"/api/v1/wechat/login",
		"/public",
	}
	//jwt auth
	r.Use(jwt.Next(urlExclude))
	//处理静态资源（不建议gin框架处理静态资源，参见 Public/readme.md 说明 ）
	r.Static("/public", "./public")             //  定义静态资源路由与实际目录映射关系
	r.StaticFile("/abcd", "./public/readme.md") // 可以根据文件名绑定需要返回的文件名

	Home := controller.HomeController{}
	Wechat := controller.WechatController{}

	//  创建一个门户类接口路由组
	rApi := r.Group("/api/v1/")
	{
		// 模拟一个首页路由
		home := rApi.Group("home/")
		{
			// 第二个参数说明：
			// 1.它是一个表单参数验证器函数代码段，该函数从容器中解析，整个代码段略显复杂，但是对于使用者，您只需要了解用法即可，使用很简单，看下面 ↓↓↓
			// 2.编写该接口的验证器，位置：app/http/validator/api/home/news.go
			// 3.将以上验证器注册在容器：app/http/validator/common/register_validator/api_register_validator.go  18 行为注册时的键（consts.ValidatorPrefix + "HomeNews"）。那么获取的时候就用该键即可从容器获取
			home.GET("news", Home.News)
		}
		// 模拟一个首页路由
		wechat := rApi.Group("wechat/")
		{
			wechat.GET("login", Wechat.Login)
			wechat.GET("logout", Wechat.Logout)
		}
	}
	return r
}
